package com.sinosoft.ptas.service;

import java.util.List;

import com.sinosoft.framework.core.common.exception.BusinessException;
import com.sinosoft.ptas.control.dto.OrganizationData;
import com.sinosoft.ptas.entity.DefaultTargetEntity;
import com.sinosoft.ptas.entity.TargetOrgRefEntity;

/**
 * 
 *默认目标服务接口
 */
public interface DefaultTargetService {
	
	/**
	 * 添加默认目标
	 * @param defaultTargetEntity
	 */
	public void createDefaultTargets(DefaultTargetEntity defaultTargetEntity) throws BusinessException;
	
	/**
	 * 添加默认目标
	 * 参数为一个默认目标集合，里面有一个实施期目标和多个年度目标，他们可以根据targetType目标类型来区分
	 * 先添加实施目标，添加成功后在添加年度目标，年度目标中的pid需要自己通过实施目标中的id来添加，实施目标没有父节点，年度目标有父节点
	 * @param defaultTargetList
	 */
	public void createListDefaultTarget(List<DefaultTargetEntity> defaultTargetList)throws BusinessException;
	/**
	 * 根据默认目标编号更新默认目标
	 * @param defaultTargetEntity
	 */
	public void updateDafaultTargets(DefaultTargetEntity defaultTargetEntity) throws BusinessException;
	
	/**
	 * 依据默认目标实体多条件查询
	 * @param defaultTargetEntity
	 * @return List<DefaultTargetEntity> 默认目标组织id
	 */
	public List<DefaultTargetEntity> retrieveDefaultTarget();
	
	/**
	 * 通过省级用户的组织Id查询实施目标
	 * 通过orgId(省级用户组织id)到目标与组织关系表中查出目标id,接着通过目标id查出对应的目标
	 * @param orgId 省级用户组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	public List<DefaultTargetEntity> retrieveDefaultTargetByProOrgId(String orgId);
	
	/**
	 * 通过其他司的组织Id查询实施目标
	 * 通过orgId(其他司用户组织id)到目标属性与组织关系表中查出目标属性id,接着通过目标属性id查出对应的默认目标
	 * @param orgId 其他司组织id
	 * @return List<DefaultTargetEntity> 默认目标列表
	 */
	public List<DefaultTargetEntity> retrieveDefaultTargetByOther(String orgId);
	
	/**
	 * 根据默认目标编号删除默认目标
	 * defaultTargetId为必传项如果没有就抛出BusinessException
	 * @param defaultTargetId
	 */
	public void deleteDefaultTarget(String defaultTargetId);
	
	/**
	 * 批量创建目标和省区域的对应关系
	 * 目标与省区域的关系是  一对多
	 * @param targetOrgRefEntity
	 * @param targetId
	 * @param orgIds
	 * @throws BusinessException
	 */
	public void createDefaultTargetOrganizationRef(TargetOrgRefEntity targetOrgRefEntity,String targetId,String[] orgIds) throws BusinessException;

	/**
	 * 根据目标编号查询省司局
	 * @param tid
	 * @param identify  0代表省司局,1代表其他司
	 * @return 省司局集合
	 */
	public List<OrganizationData> retrieveOrganizationByTid(String tid,String identify);

}
